Context (graphql)
resolver (graphql)が実行される際に共有されるオブジェクトのこと
クエリの実行中に必要な共通のデータや設定を保持するために使われる
https://www.apollographql.com/docs/apollo-server/data/context
gpt-5.icon
例えば、認証情報、データベース接続、リクエストに関するメタデータなど、すべてのリゾルバに共通してアクセスしたい情報を格納するのに役立ちます。
具体的には、GraphQLのサーバーでクエリを処理する際に、各リゾルバ関数にはcontextという引数が渡されます。このcontextオブジェクトは、クエリ全体を通して一貫したデータをリゾルバに提供できるようにするものです。
例:
code:javascript
const { ApolloServer, gql } = require('apollo-server');
// スキーマ定義
const typeDefs = gql`
type Query {
hello: String
}
`;
// リゾルバ
const resolvers = {
Query: {
hello: (parent, args, context) => {
return Hello, ${context.user.name};
},
},
};
// コンテキストを設定する関数
const context = ({ req }) => {
// 例えば、リクエストヘッダーから認証トークンを取得し、それをユーザー情報に変換する
const user = { name: 'John Doe' }; // 仮のユーザー情報
return { user };
};
// サーバーの設定
const server = new ApolloServer({
typeDefs,
resolvers,
context,
});
server.listen().then(({ url }) => {
console.log(Server ready at ${url});
});
上記の例では、contextにユーザー情報(user)を設定し、それをリゾルバ内で利用しています。
こうすることで、各リゾルバがcontext.userにアクセスして認証されたユーザー情報を取得できます。
contextは、認証情報、リクエスト固有の設定、データベース接続、ロギングの設定など、クエリの実行中に必要な情報をリゾルバに一貫して提供するために非常に便利です。